package com.hippo.core.utils.fie;

import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName FileUtil
 * @Description TODO 文件处理工具类
 * @Author tangxl
 * @create 2023-05-05 09:50
 **/
@Slf4j
public class FileUtil {

    /**
     * 获取文件路径
     * @param file 文件
     * @return 文件路径
     */
    public static String getFilePath(File file) {
        return file.getAbsolutePath();
    }

    /**
     * 获取当前路径下改文件的路径
     * @param path 路径
     * @param fileName 文件名
     * @return 文件路径
     */
    public static List<String> getFilePath(String path, String fileName) {
        File file = new File(path);
        log.info("开始检索文件路径：{}",file.getAbsolutePath());
        if (!file.exists()) {
            log.warn("路径不存在");
            return null;
        }
        List<String> paths = new ArrayList<>();
        searchFile(paths,file,fileName);
        return paths;
    }

    /**
     * 搜索文件
     * @param paths 路径
     * @param file 文件
     * @param fileName 文件名
     */
    public static void searchFile(List<String> paths,File file,String fileName) {
        File[] files = file.listFiles();
        if (files == null || files.length == 0) {
            return;
        }else {
            for (File file1 : files) {
                if (file1.isDirectory()) {
                    searchFile(paths,file1,fileName);
                }else {
                    if (file1.getName().equals(fileName)) {
                        paths.add(file1.getAbsolutePath());
                    }
                }
            }
        }

    }
    /**
     *
     * @param content 文件内容
     * @param path 文件路径
     * @param fileName 文件名
     * @param isAppend 是否追加
     */
    public static boolean writeFile(String content, String path, String fileName,boolean isAppend) {
        // 校验文件路径是否存在,创建路径和文件
        File filePath = new File(path);
        if(!filePath.exists()){
            log.info("文件路径不存在，开始创建{}",path);
            filePath.mkdirs();
        }
        File file = new File(path + File.separator + fileName);
        if (!file.exists()) {
            log.info("文件不存在，开始创建{}",file.getAbsolutePath());
            try {
                file.createNewFile();
            } catch (Exception e) {
                log.error("创建文件失败：{}",e.getMessage());
                return false;
            }
        }
        // 写入文件
        try(
                // 覆盖写入
                FileOutputStream fileOutputStream = new FileOutputStream(file,isAppend);
                ){
            byte[] bytes = content.getBytes();
            fileOutputStream.write(bytes);
        }catch (Exception e) {
            log.error("写入文件失败：{}",e.getMessage());
            return false;
        }
        return true;
    }

    public static void main(String[] args) {
//        List<String> filePath = getFilePath("study-services", "pom.xml");
//        System.out.println("搜索结果："+filePath);

        File file = new File("mysql/java-study.sql");
        System.out.println(file.getAbsolutePath());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());
        System.out.println(file.exists());
    }

}
